class No
  include Comparable
  attr_reader :rotulo, :filhos, :id

  @@contador = 1

  def initialize(rotulo, pai, estilo = nil)
    @id = "no#{@@contador}"
    @@contador += 1

    @rotulo = rotulo
    @filhos = []    
    if not pai.nil?
      pai.novo_filho(self)
    end
    @estilo = estilo
  end
  
  def <=>(outro)
    @rotulo <=> outro.rotulo
  end
  
  def formata
    inicio = "#{@id} [label=\"#{@rotulo}\""
    if not @estilo.nil?
      inicio += ",#{@estilo}"
    end
    inicio + "]"
  end

  def tamanho
    tam = 1
    @filhos.each do |filho|
      tam += filho.tamanho
    end
    tam
  end
  
  protected
  
  def novo_filho(filho)
    @filhos << filho
  end
  
  def inspect
    @rotulo
  end
end
